package com.study.designPattern.commandMode14;

/**
 * 命令模式
 */
public class CommandPattern {
    public static void main(String[] args) {
        Tv tv = new Tv(); // 接收者 对象 电视机


    Command onCommand = new OnCommand(tv); // 命令对象 开机命令
    Command offCommand = new OffCommand(tv); // 命令对象 关机命令

    Invoker invoker = new Invoker(); // 请求者
    invoker.setCommand(onCommand); // 给请求者设置 开机 命令
    invoker.call(); // 请求者去请求命令

    System.out.println("========================================");

    invoker.setCommand(offCommand); // 给请求者设置 关机命令
    invoker.call(); // 请求者去请求命令
}


}

class Invoker { // 请求者
    private Command command; // 命令


public void setCommand(Command command) { // 设置请求者 的 请求的命令
    this.command = command;
}

public void call() { // 调用
    command.Execute();
}


}

interface Command { // 命令接口
    public void Execute(); // 执行命令
}

class OnCommand implements Command { // 开机命令
    private Tv tv;


public OnCommand(Tv tv) {
    this.tv = tv;
}

@Override
public void Execute() {
    tv.OnAction();
}


}

class OffCommand implements Command { // 关机命令
    private Tv tv;


public OffCommand(Tv tv) {
    this.tv = tv;
}

@Override
public void Execute() {
    tv.OffAction();
}


}

class Tv { // 接收者 电视机
    public void OnAction() { // 开机行为
        System.out.println("电视机开机了...");
    }


public void OffAction() { // 关机行为
    System.out.println("电视机关机了...");
}


}
